import axios from 'axios'
import { BASE_URL } from '@/config'
import Qs from 'qs'
import { getToken, setToken } from './util'

class Http {
  constructor (baseUrl = BASE_URL) {
    this.baseUrl = baseUrl
  }

  // 定义全局配置信息
  getInsideConfig () {
    const config = {
      baseUrl: this.baseUrl,
      headers: {
        // 添加请求token
        token: getToken()
      }
    }
    return config
  }

  // 请求拦截器
  interceptors (instance) {
    // 请求拦截
    instance.interceptors.request.use(config => {
      console.log('加载拦截器')
      // 拦截请求参数 转换成字符串
      config.data = Qs.stringify(config.data)
      return config
    }, error => {
      return Promise.reject(error)
    })
    // 响应拦截
    instance.interceptors.response.use(res => {
      if (res.data.code === 600) {
        setToken('')// 删除已经失效或过期的token（不删除也可以，因为登录后覆盖）
      } else if (res.data.token) {
        setToken(res.data.token)
      }
      return res
    }, error => {
      return Promise.reject(error)
    })
  }

  request (options) {
    const instance = axios.create()
    options = Object.assign(this.getInsideConfig(), options)
    // 调用拦截器
    this.interceptors(instance)
    return instance(options)
  }
}

export default Http
